<?php namespace system\model;

use hdphp\Model\Model;

class User extends Model{

	//数据表
	protected $table = "user";

	//完整表名
	protected $full = false;

	//自动验证
	protected $validate=[
		//['字段名','验证方法','提示信息',验证条件,验证时间]
	];

	//自动完成
	protected $auto=[
		//['字段名','处理方法','方法类型',验证条件,验证时机]
	];

	//自动过滤
    protected $filter=[
        //[表单字段名,过滤条件,处理时间]
    ];

	//时间操作,需要表中存在created_at,updated_at字段
	protected $timestamps=false;


	//禁止插入的字段
	protected $denyInsertFields = [];

	//禁止更新的字段
	protected $denyUpdateFields = [];

	//前置方法 比如: _before_add 为添加前执行的方法
	protected function _before_add(){}
	protected function _before_delete(){}
	protected function _before_save(&$data){}

	protected function _after_add(){}
	protected function _after_delete(){}
	protected function _after_save(){}
//    登陆
    public function login(){
//        var_dump($this->create());exit;
//        执行自动验证后执行create方法
//        当自动验证不通过时返回false
        if(!$this->create())return false;
//        当post里接收code和session里存的code不相同
        if(strtoupper($_POST['code'])!=$_SESSION['code']){
//            这里的错误信息存在error属性里，可以被getError()接收到
            $this->error="验证码错误";return false;
        }
//        对比用户名是否正确
//        first()获取一条数据 一维数组
//        get()获取多条数据
        if(!$data=$this->where('username',$_POST['username'])->first()){
 //        当post提交的用户名和数据库用户名不匹配时说明用户名不存在返回错误信息
            $this->error="用户名不存在";return false;
        }
//        对比密码是否正确
//        Crypt::encrypt()手册加密
        if( md5($_POST['password'])!=$data['password']){
            $this->error="密码不正确";return false;

        }
//        到这里说明验证码和密码用户名都没有问题
        $_SESSION['admin']['uid']=$data['uid'];
        $_SESSION['admin']['username']=$data['username'];
        return true;
    }
//    修改密码
        public function changePass(){
//            array(表单字段名,过滤条件,处理时间)
//      过滤条件      self::MUST_FILTER           值:3 必须验证
//      处理时间      const MODEL_BOTH            值:3 全部情况下处理






//           @@@@@@@ 通过在模型中设置 validate 属性可以方便的进行数据验证@@@@@@@@@@
//           @@@@@@@  必须执行 create 模型方法，才会执行自动验证@@@@@@@@@
//          @@@@@@@  错误信息会记录到模型对象的 error 属性中，使用getError 模型方法获取@@@@@@
//          @@@@@@@  array(字段名,验证方法,错误信息,验证条件,验证时机)@@@@@@
            $this->validate=[
//                原始密码的自动过滤
                ['password','required','请输入原始密码',3,3],
//                新密码的自动过滤
                ['new_password','required','请输入新密码',3,3],
//                俩次确定密码的自动过滤
                ['confirm_password','confirm:new_password','俩次输入的密码不一致',3,3]
            ];
//            执行自动验证
            if(!$this->create()) return false;
//            判断原始密码是否正确
            $data=$this->where('uid',$_SESSION['admin']['uid'])->first();
//            post接收到的密码和数据库的密码不一致返回错误提示fales
            if(md5($_POST['password'])!=$data['password']){
                $this->error="原始密码不正确";return false;
            }
//            俩次输入的新密码是否一致（在自动验证处理）
//            新密码和原始密码不能一样返回错误提示
            if($_POST['confirm_password']==$_POST['password']){
                $this->error="新密码和原始密码不能一样";
                return false;
            }
//            数据库密码的修改
            $data=$this->where('uid',$_SESSION['admin']['uid'])->update(['password'=>md5($_POST['new_password'])]);
            if(!$data){
                $this->error="操作失败，请稍后再试";
                return false;
            }
            return true;
        }


}